package twitmasturbation.servlet;

import twitmasturbation.jdo.PMF;
import twitmasturbation.jdo.table.HistoryTbl;
import twitter4j.Twitter;
import twitter4j.TwitterException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import java.io.IOException;
import java.util.Date;
import java.util.List;

import javax.jdo.PersistenceManager;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class PostServlet extends HttpServlet {
    private static final long serialVersionUID = 2132731135996613711L;

	/** {@link org.apache.commons.logging.Log} オブジェクト。 */
	protected static final Log LOG = LogFactory.getLog(PostServlet.class);

	/** 定型文 */
	private static final String TEXT = "ふぅ・・・  ＞  ";



	/** ハッシュタグ */
	private static final String HASH_TAG = "#twitmasturbation";

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    	request.setCharacterEncoding("UTF-8");
        Twitter twitter = (Twitter)request.getSession().getAttribute("twitter");
        try {
        	// OAuth認証したユーザのtwitterのidを調べる
        	long accountId = twitter.verifyCredentials().getId();



        	// TODO:dbに何回目のポストか書きこむ
            Date date = new Date();
            HistoryTbl greeting = new HistoryTbl(accountId,  date);

            PersistenceManager pm = PMF.get().getPersistenceManager();

            try{
            	pm.makePersistent(greeting);
            } finally {
//            	pm.close();
            }

            // 累計何回目のオナニーかをHistoryTblから調べる
            PersistenceManager pmGet = PMF.get().getPersistenceManager();

            int masturbationTime = 0;
            String query = "select from " + HistoryTbl.class.getName() + " where accountId == "+ accountId;
//            String query = "select from " + HistoryTbl.class.getName();
            LOG.info("[PostServlet] 実行クエリ:" + query);
            System.out.println("[PostServlet] 実行クエリ:" + query);
            List<HistoryTbl> historys = (List<HistoryTbl>) pmGet.newQuery(query).execute();
//            pmGet.close();

            if(historys.isEmpty()){
            	// 初めてのオナニー
            	LOG.info("クエリ実行結果がemptyでした。");
            	System.out.println("クエリ実行結果がemptyでした。");

            } else {
            	masturbationTime = historys.size();
            	LOG.info("クエリ実行結果" + historys.size() + "個の結果が返却されました。");
            	System.out.println("クエリ実行結果" + historys.size() + "個の結果が返却されました。");

            }

        	// TODO:dbから累計何回目のポストか調べてつぶやきの中に入れる。
            String text = TEXT + masturbationTime + "回目のオナニー " + HASH_TAG;
            System.out.println(text);

            twitter.updateStatus(text);

        } catch (TwitterException e) {
            throw new ServletException(e);
        }
        response.sendRedirect(request.getContextPath()+ "/");
    }
}
